home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / utmisc1 / fscode.lha / Src / CRC32.c < prev    next >
C/C++ Source or Header  |  1995-11-02  |  1KB  |  55 lines

  1. /*
  2. ** $VER: CRC32.c (16.4.94) by Flavio Stanchina
  3. ** Adapted from comp.compression FAQ
  4. **
  5. ** Changed to do one-byte-at-a-time CRC
  6. ** Don't complement CRC for simplicity
  7. */
  8.  
  9. #include <exec/types.h>
  10. #include "CRC32.h"
  11.  
  12. ULONG crc32_table[256];
  13.  
  14. /*
  15. ** Build auxiliary table for parallel byte-at-a-time CRC-32.
  16. */
  17.  
  18. VOID CRC32_init(VOID)
  19. {
  20.    ULONG c, i, j;
  21.  
  22.    for(i = 0; i < 256; ++i)
  23.    {
  24.       for(c = i << 24, j = 8; j > 0; --j)
  25.          c = c & 0x80000000 ? (c << 1) ^ CRC32_POLY : (c << 1);
  26.       crc32_table[i] = c;
  27.    }
  28. }
  29.  
  30. ULONG CRC32_stream(UBYTE c, ULONG crc)
  31. {
  32.    return (crc << 8) ^ crc32_table[(crc >> 24) ^ c];
  33. }
  34.  
  35. ULONG CRC32_block(UBYTE *buf, ULONG len)
  36. {
  37.    ULONG crc = CRC32_INITIAL;
  38.    UBYTE *p;
  39.  
  40.    for(p = buf; len > 0; ++p, --len)
  41.       crc = (crc << 8) ^ crc32_table[(crc >> 24) ^ *p];
  42.  
  43.    return crc; /* to simplify some things */
  44. }
  45.  
  46. ULONG CRC32_blocks(UBYTE *buf, ULONG len, ULONG crc)
  47. {
  48.    UBYTE *p;
  49.  
  50.    for(p = buf; len > 0; ++p, --len)
  51.       crc = (crc << 8) ^ crc32_table[(crc >> 24) ^ *p];
  52.  
  53.    return crc; /* to simplify some things */
  54. }
  55.